"use strict";
$(document).ready(function() {

  var userStatus = [ '未激活', '正常', '账号过期', '密码过期', '锁定' ];

  var $table = $('#users').DataTable({
    bProcessing : true,
    bServerSide : true,
    sPaginationType : 'full_numbers',
    oLanguage : {
      sLengthMenu : '每页显示 _MENU_ 条',
      sInfo : '第 _START_ -  _END_ 条，共 _TOTAL_ 条',
      sInfoFiltered : '',
      sInfoEmpty: '没有数据',
      sZeroRecords : '没有数据',     
      sProcessing : '正在加载数据...',
      oPaginate : {
        sFirst : '首页',
        sPrevious : '前一页',
        sNext : '后一页',
        sLast : '末页'
      },
      sSearch : '检索',
      sSearchPlaceholder : '输入用户账号或姓名'
    },
    columns : [ {
      data : 'id'
    }, {
      data : 'account'
    }, {
      data : 'name'
    }, {
      data : 'status',
      className : 'text-center',
      render : function(data, type, row, meta) {
        if (data < 0 || data >= userStatus.length) {
          return '未知';
        } else {
          return userStatus[data];
        }
      }
    }, {
      data : 'createdTime',
      className : 'text-center',
      render : function(data, type, row, meta) {
        return $.format.date(data, 'yyyy-M-d H:mm')
      }
    }, {
      data : 'lastModified',
      className : 'text-center',
      render : function(data, type, row, meta) {
        return $.format.date(data, 'yyyy-M-d H:mm')
      }
    } ],
    order: [ [0, 'asc'] ],
    ajax : function(data, callback, settings) {
      var d = $.customParam(data);
      $.ajax({
        dataType : 'json',
        method : 'POST',
        url : 'users_processing.json',
        data : d,
        success : function(json) {
          var error = json.error || json.sError;
          if (error) {
            alert(error);
            return;
            // _fnLog( oSettings, 0, error );
          }
          settings.json = json;
          callback(json);
        }
      });
    }
  });
  $('#users tbody').on('click', 'tr', function() {
    if ($(this).hasClass('selected')) {
      $(this).removeClass('selected');
    } else {
      $table.$('tr.selected').removeClass('selected');
      $(this).addClass('selected');
    }
  });

  // 新增处理
  $('#creatediv form').validate({
    rules : {
      account : {
        required : true,
        remote : {
          url : "user/unused",
          type : "post"
        }
      },
      name : {
        required : true
      }
    },
    messages : {
      account : {
        required : '账号不能为空',
        remote : '账号已存在'
      },
      name : {
        required : '姓名不能为空'
      }
    },
    errorClass : 'has-error',
    validClass : 'has-success',
    highlight : function(element, errorClass, validClass) {
      var $c = $(element).closest('div.form-group');
      $c.addClass(errorClass).removeClass(validClass);
    },
    unhighlight : function(element, errorClass, validClass) {
      var $c = $(element).closest('div.form-group');
      $c.removeClass(errorClass).addClass(validClass);
    }
  });
  var addDlg;
  $('#btnAdd').click(function() {
    addDlg = layer.open({
      type : 1,
      title : false,
      area : '500px',
      closeBtn : true,
      shadeClose : false,
      content : $('#creatediv')
    });
    $('#creatediv form').get(0).reset();
    $('#creatediv form').validate().resetForm();
    $('#add_account')[0].focus();
  });
  $('#creatediv .btn-default').click(function() {
    layer.close(addDlg);
  });
  $('#creatediv .btn-primary').click(function() {
    if (!$('#creatediv form').valid()) {
      layer.alert('请修正输入错误！');
    } else {
      var data = $('#creatediv form').serializeArray();
      data.push({
        '_method' : 'POST'
      });
      $.ajax({
        url : 'user',
        method : 'POST',
        data : data,
        success : function(ret) {
          layer.close(addDlg);
          $table.ajax.reload();
        }
      });
    }
  });

  // 编辑处理
  $('#editdiv form').validate({
    rules : {
      name : {
        required : true
      }
    },
    messages : {
      name : {
        required : '姓名不能为空'
      }
    },
    errorClass : 'has-error',
    validClass : 'has-success',
    highlight : function(element, errorClass, validClass) {
      var $c = $(element).closest('div.form-group');
      $c.addClass(errorClass).removeClass(validClass);
    },
    unhighlight : function(element, errorClass, validClass) {
      var $c = $(element).closest('div.form-group');
      $c.removeClass(errorClass).addClass(validClass);
    }
  });
  var editDlg;
  var editUser;
  $('#btnEdit').click(function() {
    var data = $table.row('.selected').data();
    if (!data) {
      layer.alert('请选中待更改的用户！');
      return;
    }
    var loadIndex = layer.load();
    $.ajax({
      url : 'user/' + data.id,
      method : 'GET',
      data : {
        _method : 'GET'
      },
      success : function(ret) {
        layer.close(loadIndex);
        editDlg = layer.open({
          type : 1,
          title : false,
          area : '500px',
          closeBtn : true,
          shadeClose : false,
          content : $('#editdiv')
        });
        $('#editdiv form').get(0).reset();
        $('#editdiv form').validate().resetForm();
        editUser = ret;
        $('#edit_account').text(editUser.account);
        $('#edit_name').val(editUser.name);
        $('#edit_status').val(editUser.status);
        $('#edit_admin').val(editUser.admin ? 'true' : 'false');
        $('#edit_name')[0].focus();
      }
    });
  });
  $('#editdiv .btn-default').click(function() {
    layer.close(editDlg);
  });
  $('#editdiv .btn-primary').click(function() {
    if (!$('#editdiv form').valid()) {
      layer.alert('请修正输入错误！');
    } else {
      editUser.name = $('#edit_name').val();
      editUser.status = $('#edit_status').val();
      editUser.admin = 'false' == $('#edit_admin').val() ? false : true;
      editUser['_method'] = 'PUT';
      $.ajax({
        url : 'user/' + editUser.id,
        method : 'POST',
        data : editUser,
        success : function(ret) {
          layer.close(editDlg);
          $table.ajax.reload();
        }
      });
    }
  });

  // 删除处理
  $('#btnDel').click(function() {
    var data = $table.row('.selected').data();
    if (!data) {
      layer.alert('请选中待删除的用户！');
      return;
    }
    layer.confirm('确认要删除用户\"' + data.name + '\"？', function(index) {
      $.ajax({
        url : 'user/' + data.id,
        method : 'POST',
        data : {
          _method : 'DELETE'
        },
        success : function(ret) {
          layer.close(index);
          $table.ajax.reload();
        }
      });
    });
  });

  // 重置口令处理
  var resetDlg;
  var resetUser;
  $('#btnPwd').click(function() {
    var data = $table.row('.selected').data();
    if (!data) {
      layer.alert('请选中待重置的用户！');
      return;
    }
    var loadIndex = layer.load();
    $.ajax({
      url : 'user/' + data.id,
      method : 'GET',
      data : {
        _method : 'GET'
      },
      success : function(ret) {
        layer.close(loadIndex);
        resetDlg = layer.open({
          type : 1,
          title : false,
          area : '500px',
          closeBtn : true,
          shadeClose : false,
          content : $('#resetdiv')
        });
        $('#resetdiv form').get(0).reset();
        resetUser = ret;
        $('#reset_account').text(resetUser.account);
        $('#reset_name').text(resetUser.name);
        $('#reset_password').val('');
      }
    });
  });
  $('#resetdiv .btn-default').click(function() {
    layer.close(resetDlg);
  });
  $('#resetdiv .btn-primary').click(function() {
    var data = {
      id : resetUser.id,
      pwd : $('#reset_password').val()
    };
    $.ajax({
      url : 'user/reset',
      method : 'POST',
      data : data,
      success : function(ret) {
        layer.close(resetDlg);
        layer.alert('用户\"' + resetUser.name + '\"密码重置成功！');
      }
    });
  });

});